package com.lt.mapper;

import com.lt.dto.MyProject;
import com.lt.dto.ProjectEnd;
import com.lt.dto.StudentApplyDto;
import com.lt.entity.*;

import java.util.List;
import java.util.regex.Pattern;

/**
 * @Author :liteng
 * @Time : 2023/11/5 19:18
 */
public interface ProjectMapper {

    /**
     * 获得所有项目申报记录
     *
     *
     * 进展记录
     * project_approval，project_interim_review
     *
     * @return
     */
    List<MyProject> selectAllMyProject(int table);


    /**
     * 根据项目id查询项目
     * 根据project_approval查询project
     * 项目申报
     * project
     *
     * @param projectId
     * @return
     */
    Project selectProject(Long projectId);

    /**
     * 根据项目id查询项目  详情
     * 项目详情
     * project
     *
     * @param projectId
     * @return
     */
    Project selectProjectDetails(Long projectId);

    /**
     * 查询项目的指导教师
     * 项目申报
     * teacher join teacher_guide
     *
     * @param projectId
     * @return
     */
    String selectTeacher(Long projectId);

    /**
     * 查询项目的指导教师  详情
     * 项目详情
     * teacher join teacher_guide
     *
     * @param projectId
     * @return
     */
    Teacher selectTeacherDetails(Long projectId);

    /**
     * 查询项目负责人
     * 项目申报
     * student join student_join
     *
     * @param projectId
     * @return
     */
    Student selectChargeStu(Long projectId);

    /**
     * 查询项目参加总人数，包括负责人
     * student_join
     *
     * @param projectId
     * @return
     */
    Integer selectJoinNum(Long projectId);

    /**
     * 查询项目参加的学生
     * 项目详情
     * student join student_join
     *
     * @param projectId
     * @return
     */
    List<StudentApplyDto> selectJoinStudents(Long projectId);

    /**
     * 查询项目导师
     * 项目详情
     * tutor join tutor_guide
     *
     * @param projectId
     * @return
     */
    Tutor selectTutor(Long projectId);

    /**
     * 查询项目文件
     * 项目详情
     * file join project_file
     *
     * @param projectId
     * @return
     */
    List<File> selectFilesByProject(Long projectId);

    /**
     * 查询未通过原因
     * project_approval
     * 项目申报
     *
     * @param projectId
     * @return
     */
    String selectDetails(Long projectId,int table);

    /**
     * 根据项目id查询提交次数
     * 进展记录
     * project_interim_review
     *
     * @param projectId
     * @return
     */
    Integer selectTimesById(Long projectId);

    /**
     * 进展记录：
     * 提交日志
     *
     * @param projectId
     * @param fileId
     */
    void insertLogFile(Long projectId, Long fileId);


    /**
     * 更新提交次数,加一
     * 进展记录
     * project_interim_review
     *
     * @param projectId
     */
    void updateSubmitFileTimes(Long projectId);

    /**
     *
     * @param status
     * @param projectId
     */
    void updateSubmitStatus(int status, Long projectId);

    /**
     * 根据项目编号查询组内成员
     *
     * @param projectId
     * @return
     */
    List<String> selectMember(Long projectId);

    /**
     * 删除项目组员，不包括负责人
     */
    Boolean deleteStuJoin(Long projectId);

    /**
     * 添加项目成员
     * @param stuId
     * @param applyDto
     * @param projectId
     */
    void insertJoin(Long stuId, StudentApplyDto applyDto, Long projectId);

    /**
     * 查询中期审核失败详情
     * @param projectId
     * @return
     */
//    String selectInterimDetails(Long projectId);

    /**
     * 查询结项审核失败详情
     * @param projectId
     * @return
     */
//    String selectEndDetails(Long projectId);

    /**
     * 查询项目状态
     * @param projectId
     * @return
     */
    Integer selectStatus(Long projectId);

    /**
     * 查询是否提交了结项材料
     * @param projectId
     * @return
     */
    Integer selectSubmitted(Long projectId);

    /**
     * 插入论文
     * @param projectId
     * @param paper
     */
    Integer insertPaper(Long projectId,Paper paper);


    /**
     * 插入专利
     * @param projectId
     * @param patent
     */
    Integer insertPatent(Long projectId, Patent patent);

    /**
     * 插入实体作品
     * @param projectId
     * @param physicalWork
     */
    Integer insertPhysicalWork(Long projectId, PhysicalWork physicalWork);

    /**
     * 更新结项是否提交材料
     * @param i
     * @param projectId
     */
    Integer updateEndSubmitted(int i, Long projectId);

    /**
     * 更新project——end 状态
     * @param projectId
     * @param status
     */
    Integer updateEndStatus(Long projectId, int status,String details);

    /**
     *
     * 获取中期审核的状态
     * @param projectId
     */
    Integer selectInterimStatus(Long projectId);

//    ProjectEnd selectOneEnd(Long projectId);
}
